AWS Systems Manager Session Manager でポートフォワーディングする際に接続先の EC2 インスタンスをタグで絞り込む方法を教えてください
困っていること
AWS Systems Manager Session Manager でポートフォワーディングする際に接続先の EC2 インスタンスをタグで絞り込みたいです。
参考資料[1]を元に、下記のように IAM ユーザーにポリシーを付与しました。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:ap-northeast-1:<AccountID>:instance/*" ], "Condition": { "StringLike": { "ssm:resourceTag/Env": [ "Dev" ] } } }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:userid}-*" ] } ] }
しかしながら、下記のエラーが発生し、ポートフォワーディングによる接続ができません。
どのように対応すれば良いでしょうか。
どう対応すればいいの?
下記の IAM ポリシーに変更してください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:ap-northeast-1:<AccountID>:instance/*" ], "Condition": { "StringLike": { "ssm:resourceTag/Env": [ "Dev" ] } } }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:ap-northeast-1::document/AWS-StartPortForwardingSession" ] }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }
どうしてこうしなければいけないのか
ssm:StartSession
アクションでは、Resouce
句で対象を絞り込むことができます。
アクション | 説明 | アクセスレベル | リソースタイプ(*必須) | 条件キー |
---|---|---|---|---|
StartSession | セッションマネージャーセッションの指定したターゲットへの接続を開始する許可を付与 | 書き込み | document | |
instance | ||||
managed-instance | ||||
task | ||||
ssm:SessionDocumentAccessCheck | ||||
ssm:resourceTag/${TagKey} | ||||
aws:ResourceTag/${TagKey} |
Resouce
句にinstance
を指定し、Condition
句にssm:resourceTag/${TagKey}
を指定した場合、ドキュメントが対象から外れてしまします。
AWS Systems Manager Session Manager でポートフォワーディングする際に実行するドキュメントはAWS-StartPortForwardingSession
です。
そのため、ssm:StartSession
アクションの許可について、Resouce
句にドキュメントAWS-StartPortForwardingSession
を対象するように明示的に記載する必要があります。